Implement Mississippi Child Care Payment Program (CCPP/CCAP)#8648
Open
hua7450 wants to merge 10 commits into
Open
Implement Mississippi Child Care Payment Program (CCPP/CCAP)#8648hua7450 wants to merge 10 commits into
hua7450 wants to merge 10 commits into
Conversation
Placeholder changelog fragment to start the ms-ccap branch. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8648 +/- ##
==========================================
Coverage 100.00% 100.00%
==========================================
Files 1 18 +17
Lines 23 291 +268
==========================================
+ Hits 23 291 +268
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…eferences Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-document) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ly-2023 schedule Center and family-home full-time rates now carry a second effective-dated entry from the FY2025-2027 CCDF State Plan (most-populous region = metro, lowest region = non-metro). Part-time and special-needs retain the prior-era values (the State Plan publishes full-time base rates only). Integration tests split into era-1 (2024-01) and era-2 (2025-01) cases. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…Fee Scale Table 2 The up-to-50%-SMI per-size copay rates (5.5/5/4.5/4/3.5%) are published directly in the Copay Fee Scale 'Table 2: Family Co-Pay Rates', not merely derived from the 5.5% cap. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Page anchors: fix systematic +1 offset (Rule 5.1 #26->25, Rule 5.4 countable #29->28, priority populations #19->18, FPL exemption PolicyEngine#41->40, FT/PT defs #13->12) and correct inline definition page numbers in age/hours titles. - Wrong-rule citations: subsidy/reimbursement PolicyEngine#45 -> Rule 8.1 PolicyEngine#57 (ms_ccpp, ms_child_care_subsidies); provider types PolicyEngine#45 -> Rule 7.1 PolicyEngine#43. - Copay test: $0 poverty-line exemption takes precedence over the $10 minimum-fee cap for a special-needs child at/below FPL. - Activity: note the unmodeled Rule 5.1(3) life-threatening-illness waiver. - Backdate age-group/time-category classification brackets to 2021-11-01. - Add an income-above-85%-SMI ineligible case to ms_ccpp.yaml. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…pay categories - Income (Rule 5.4): exclude earned income of students under 18 (new ms_ccpp_countable_earned_income) and floor the self-employment sum at zero so a business loss does not offset other income. Split the countable income sources into self_employment_sources and unearned_sources. - Co-payment (Rule 6.2): decompose ms_ccpp_copay into ms_ccpp_income_based_copay, ms_ccpp_minimum_fee_category, and ms_ccpp_copay_waived. The $10 minimum-fee cap now requires a parent with a disability who is receiving SSI (ssi > 0), and a special-needs child must be a disabled dependent under 19. - Add tests for the new variables and the corrected income/copay behavior. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements Mississippi's Child Care Payment Program (CCPP) — the state's CCDF-funded child care subsidy, administered by the Mississippi Department of Human Services (MDHS) through the Division of Early Childhood Care and Development (DECCD). The program reimburses providers for the cost of care for eligible low-income working families, net of a sliding-scale family co-payment.
Closes #8647
Regulatory Authority
Program Overview
Eligibility
ms_ccpp_eligible_child:where(is_disabled, age < 19, age < 13); paramseligibility/child_age_limit.yaml(13),eligibility/special_needs_child_age_limit.yaml(19)ms_ccpp_income_eligible:countable_income <= hhs_smi * 0.85; paramincome/smi_rate.yaml(0.85). Uses the federalhhs_smi% ratio, not transcribed SMI dollarsdefined_for = StateCode.MSchain onms_ccpp_eligiblems_ccpp_activity_eligible:weekly_hours_worked_before_lsr >= 25 | is_full_time_student; parameligibility/activity_hours.yaml(25)ms_ccpp_activity_eligibleadds| is_ssi_disabledfor head/spouse. (Rule 5.1(3) life-threatening-illness waiver is documented but not tracked.)is_ccdf_asset_eligible(reused; no state asset parameter)is_ccdf_immigration_eligible_child(reused)ms_ccpp_categorically_eligible:is_tanf_enrolled | is_homeless | receives_or_needs_protective_services(eligible-child and asset tests still apply)Income
Gross-income tested with no deductions (Manual Rule 5.4).
ms_ccpp_countable_income(SPMUnit, MONTH) = countable earned income (summed across members) + countable unearned income.ms_ccpp_countable_earned_income, Person):employment_incomeplus the self-employment sum (self_employment_income,sstb_self_employment_income,farm_operations_income, listed inincome/countable_income/self_employment_sources.yaml). Two manual rules shape it:income/student_earner_age_limit.yaml(18) contributes $0 earned income; their unearned income still counts.income/countable_income/unearned_sources.yaml):social_security(parent and child),ssi(parent and child — listed separately from thesocial_securityumbrella),unemployment_compensation,workers_compensation,alimony_income,veterans_benefits,pension_income,rental_income,dividend_income,capital_gains.social_security_disabilityis omitted because thesocial_securityumbrella already adds it. Unemployment compensation is counted only at redetermination in the manual; modeled as always-countable, with the simplification documented in the parameter.Co-payment (sliding fee)
ms_ccpp_copay(SPMUnit, MONTH) composes three sub-variables:where(ms_ccpp_copay_waived, 0, where(ms_ccpp_minimum_fee_category, min(income_based, $10), income_based)).ms_ccpp_income_based_copay— gross income (floored at $0) × a percentage that depends on family size and the SMI band (Copay Fee Scale, effective 2021-11-01), paramscopay/rate/very_low_income.yamlandcopay/rate/low_income.yaml:The band split is at 50% SMI (
income/very_low_income_smi_rate.yaml= 0.50); family size caps at the "6 or more" row (copay/max_family_size.yaml= 6).ms_ccpp_copay_waived→ $0 for families at or below the federal poverty line (copay/fpg_exempt_rate.yaml= 1), TANF recipients, and homeless families with no countable income (Rule 6.2, p.40). A genuine $0, not a sentinel floor row. The waiver takes precedence over the minimum-fee cap.ms_ccpp_minimum_fee_category→ caps the fee at $10 (copay/minimum_fee_categories_cap.yaml) when income is above the FPL (Rule 6.2, p.41). Of the manual's six minimum-fee populations, the three PolicyEngine can track fire: protective-services children (receives_or_needs_protective_services), parents with a disability who are receiving SSI (is_ssi_disabledhead/spouse withssi > 0), and special-needs children (a disabled tax-unit dependent under 19, per Definition 25). Transitional Child Care and teen-parent categories are not tracked at the moment.Provider rates (two effective-dated eras)
This is the most nuanced part of the implementation, so the provenance is spelled out explicitly. Rates are weekly, by provider type (center / family-home) × 4 age bands × full-time/part-time × metro/non-metro, plus a flat Special Needs (all ages) rate per provider type. All values vision-verified against the source PDFs.
The full-time base rates carry two consecutive effective-dated eras (sequential, not conflicting — a 2024 calculation uses the first, a late-2024-onward calculation uses the second):
2023-07-01— "Current CCPP Rates" from the 2024 Market Rate Survey Table 1 (licensed center, p.9) and Table 2 (registered family-home, p.10) — the operative paid rates of that era (not the survey's 75th-percentile recommendation tables).2024-10-01— FY2025-2027 CCDF State Plan adopted full-time base rates (§4.3.2, pp.59-60). The State Plan reports rates by "most populous region" (→ metro slot, = the statewide 75th-percentile) and "lowest region" (→ non-metro slot).The FY2025-2027 State Plan publishes full-time base rates only, so part-time and special-needs retain the era-1 values for the 2024-10 era (the adopted part-time/special-needs dollars are not public — only the copay fee scale is).
Licensed center (
rates/center.yaml) — weekly, metro / non-metro:Registered family-home (
rates/family_home.yaml) — weekly, metro / non-metro:The center and family-home special-needs rate sets live in
rates/special_needs_center.yamlandrates/special_needs_home.yaml.ms_ccpp_age_group): 4 bands from the manual definitions — Infant (<1 yr, Add "personal_income" as a layer to parameters/tax/ #49), Toddler (12–35 months, Add ItemDed #87), Preschool (3 yr to kindergarten, Integrate data package #66), School-age (≥5 yr, Shelter deduction SNAP parameter #74). The survey's separate 2-year-old band collapses into the manual's single Toddler band.ms_ccpp_time_category): part-time = care for fewer than 6 hours of a 24-hour day; full-time = ≥6 hr/day (manual def. OpenFisca conventions #44/Developer meeting agenda 2021-08-28 #65). Under the operative schedule PT < FT in every cell, so no part-time cap is needed.ms_ccpp_facility_location): the schedule varies by facility location, which PolicyEngine does not track, so the household's county is used as a proxy. The 17 metro counties (geography/metro_counties.yaml) are exactly the Mississippi counties in an OMB February-2013 MSA (Jackson, Gulfport-Biloxi-Pascagoula, Hattiesburg, and the Mississippi portion of Memphis).Benefit
ms_ccpp(SPMUnit, MONTH): per child, the subsidy ismin(provider charge, applicable maximum weekly rate × 52/12) − family copay, floored at $0. Per-child weekly maximum rates (ms_ccpp_maximum_weekly_rate) are summed across children, converted to monthly viaWEEKS_IN_YEAR / MONTHS_IN_YEAR, capped at the provider charge (spm_unit_pre_subsidy_childcare_expenses), and reduced by the family co-payment. A child not actually in care (childcare_hours_per_week≤ 0) draws no rate. The SPMUnit-levelms_child_care_subsidies(YEAR) aggregatesms_ccppand feeds the federalchild_care_subsidies.Requirements coverage
eligibility/variables + paramsms_ccpp_categorically_eligiblems_ccpp_countable_income,ms_ccpp_countable_earned_income,*_sources.yamlms_ccpp_copay+ms_ccpp_income_based_copay/ms_ccpp_minimum_fee_category/ms_ccpp_copay_waivedms_ccpp_maximum_weekly_rate,rates/paramsms_ccppprograms.yamlNot modeled (by design)
Test plan
policyengine-core test policyengine_us/tests/policy/baseline/gov/states/ms/dhs/ccpp -c policyengine_us)Files
New program files under
gov/states/ms/dhs/ccpp/(20 parameters, 18 variables, 16 test files) plus 2 registry edits:Registry edits:
policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml— addsms_child_care_subsidiesto the 2021-01-01 listpolicyengine_us/programs.yaml— adds the MS CCDFstate_implementationsentry and MS to the CCDF coverage lineChangelog:
changelog.d/ms-ccap.added.md